#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <stdint.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdbool.h>
#include <errno.h>
#include <string.h>
#include <signal.h>
#include <dlfcn.h>
#include <pthread.h>
#include <linux/fb.h>

// 信号的响应函数
// sig: 触发该响应函数的信号
// 谨慎访问共享资源（如全局变量）
void sighandler(int sig)
{
    switch(sig)
    {
    case SIGINT:
        printf("收到了SIGINT\n");
        break;
    case SIGQUIT:
        printf("收到了SIGQUIT\n");
        break;
    }
}

int main(int argc, char const *argv[])
{
    // 1, 忽略信号
    // signal(SIGINT, SIG_IGN);

    // 2， 捕捉信号
    signal(SIGINT, sighandler);
    signal(SIGQUIT, sighandler);

    // 3, 屏蔽（延迟响应，延迟到解除屏蔽）
    sigset_t sigs;
    sigemptyset(&sigs);
    sigaddset(&sigs, SIGINT);
    sigaddset(&sigs, SIGQUIT);
    sigprocmask(SIG_BLOCK, &sigs, NULL);

    for(int i=0; i<26; i++)
    {
        fprintf(stderr, "%c", 'a'+i);
        usleep(200*1000);
    }

    // 解除屏蔽
    sigprocmask(SIG_UNBLOCK, &sigs, NULL);
    for(int i=0; ; i++, i%=26)
    {
        fprintf(stderr, "%c", 'a'+i);
        usleep(200*1000);
    }

    return 0;
}
